package com.lion.utils;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * @author Chris Chan
 * Create on 2021/12/26 23:58
 * Use for: 数组处理工具
 * Explain:
 */
public class ArrayUtil {

    /**
     * 判断一个数组是否为空
     *
     * @param arr
     * @return
     */
    public static boolean isArrayEmpty(Object[] arr) {
        return null != arr && arr.length > 0;
    }

    /**
     * 转换为List
     *
     * @param arr
     * @param <T>
     * @return
     */
    public static <T> List<T> toList(T[] arr) {
        if (null == arr || arr.length == 0) {
            return new ArrayList<>();
        }
        return Stream.of(arr).collect(Collectors.toList());
    }

    /**
     * List转换为数组
     * 未测试
     *
     * @param list
     * @param <T>
     * @return
     */
    public static <T> T[] fromList(List<T> list, Class<T> clazz) {
        int size = list.size();
        if (CollectionUtil.isEmpty(list)) {
            return null;
        }
        //创建泛型数组 Java 8 之前：使用反射创建
        T[] arr = (T[]) Array.newInstance(clazz, size);
        list.toArray(arr);
        return arr;
    }

    /**
     * 将数字列表转为字符串数组
     *
     * @param list
     * @return
     */
    public static String[] fromLongList(List<Long> list) {
        if (null == list || list.size() == 0) {
            return null;
        }
        String[] arr = new String[list.size()];
        List<String> strList = list.stream().map(String::valueOf).collect(Collectors.toList());
        strList.toArray(arr);
        return arr;
    }
}
